home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / string / RCS / strsep.c,v < prev    next >
Text File  |  1991-08-05  |  3KB  |  117 lines

  1. head     1.2;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.2
  10. date     91.08.05.16.48.37;  author shirriff;  state Exp;
  11. branches ;
  12. next     1.1;
  13.  
  14. 1.1
  15. date     90.07.08.16.32.06;  author shirriff;  state Exp;
  16. branches ;
  17. next     ;
  18.  
  19.  
  20. desc
  21. @Unix 5.1 strsep.c
  22. @
  23.  
  24.  
  25. 1.2
  26. log
  27. @Added comments
  28. @
  29. text
  30. @/*
  31.  * Copyright (c) 1988 The Regents of the University of California.
  32.  * All rights reserved.
  33.  *
  34.  * Redistribution and use in source and binary forms are permitted
  35.  * provided that the above copyright notice and this paragraph are
  36.  * duplicated in all such forms and that any documentation,
  37.  * advertising materials, and other materials related to such
  38.  * distribution and use acknowledge that the software was developed
  39.  * by the University of California, Berkeley.  The name of the
  40.  * University may not be used to endorse or promote products derived
  41.  * from this software without specific prior written permission.
  42.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  43.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  44.  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  45.  */
  46.  
  47. #ifndef lint
  48. static char rcsid[] = "$Header: /sprite/src/lib/c/string/RCS/strsep.c,v 1.1 90/06/27 11:39:30 shirriff Exp $ SPRITE (Berkeley)";
  49. #endif /* not lint */
  50.  
  51. #include <stdio.h>
  52.  
  53. /*
  54.  *----------------------------------------------------------------------
  55.  *
  56.  * strsep --
  57.  *
  58.  *      Extract tokens separated by single separators (similar to strtok).
  59.  *
  60.  * Results:
  61.  *      Returns pointer to next token in the string.
  62.  *
  63.  * Side effects:
  64.  *      Sets token to NULL.  Keeps track of str.
  65.  *
  66.  *----------------------------------------------------------------------
  67.  */
  68.  
  69. char *
  70. strsep(s, delim)
  71.     register char *s, *delim;
  72. {
  73.     register char *spanp;
  74.     register int c, sc;
  75.     static char *last;
  76.     char *tok;
  77.  
  78.     if (s == NULL && (s = last) == NULL)
  79.         return(NULL);
  80.  
  81.     /*
  82.      * Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
  83.      * Note that delim must have one NUL; we stop if we see that, too.
  84.      */
  85.     for (tok = s;; ++s) {
  86.         c = *s;
  87.         spanp = delim;
  88.         do {
  89.             if ((sc = *spanp++) == c) {
  90.                 if (c == 0) {
  91.                     last = NULL;
  92.                     return(tok == s ? NULL : tok);
  93.                 }
  94.                 *s++ = '\0';
  95.                 last = s;
  96.                 return(tok);
  97.             }
  98.         } while (sc);
  99.     }
  100.     /* NOTREACHED */
  101. }
  102. @
  103.  
  104.  
  105. 1.1
  106. log
  107. @Initial revision
  108. @
  109. text
  110. @d18 3
  111. a20 3
  112. #if defined(LIBC_SCCS) && !defined(lint)
  113. static char sccsid[] = "@@(#)strsep.c    5.1 (Berkeley) 9/19/88";
  114. #endif /* LIBC_SCCS and not lint */
  115. d23 16
  116. @
  117.